# 装饰器
"""
    特点
    1.函数A是作为参数出现的，函数B就接收函数A作为参数()
    2.要有闭包的特点

"""


# 定义一个装饰器
def decorate(func):
    a = 100
    print("外层start")

    def wrapper(*args, **kwargs):
        print(args, kwargs)
        print("1111111111111111111")
        func(*args, **kwargs)
        print("2222222222222222222")
        print(a)

    print("外层end")
    return wrapper


# 定义一个装饰器
def decorate1(func):
    a = 100

    def wrapper(*args):
        print("3333333333333")
        func(*args)
        print("4444444444444")

    return wrapper


"""
    1. house被装饰函数
    2. 将被装饰函数作为参数传递给装饰器decorate
    3. 执行decorate函数
"""


@decorate
def house(n):
    print("我是毛坯房", n)


@decorate
def stu(n, a, **kwargs):
    print("我是毛坯房", n, a, kwargs)


print(house)
house(5)

dict1 = {"name": "zhangsan", "age": 89}
stu("张珊珊", 20, **dict1)
